// utils/ejs-utils.js
import ejs from 'ejs';

// 自定义函数库
const ejsHelpers = {
	// 示例1：日期格式化
	formatDate: (date, format = 'YYYY-MM-DD') => {
		const d = new Date(date);
		return format
			.replace('YYYY', d.getFullYear())
			.replace('MM', String(d.getMonth() + 1).padStart(2, '0'))
			.replace('DD', String(d.getDate()).padStart(2, '0'));
	},
	// 示例2：大写转换
	uppercase: (str) => str.toUpperCase(),
	// 添加更多函数...
};

/**
 * 前置处理 - 将 {{ }} 模板转换为 EJS 标准格式
 * @param {string} template - 原始模板
 * @returns {string} - 转换后的模板
 */
function preprocessTemplate(template) {
	return template
		// 变量输出，带转义: {{ var }} => <%= var %>
		.replace(/\{\{\s*(.*?)\s*\}\}/g, '<%=$1%>')
		// 不转义输出: {{- var }} => <%- var %>
		.replace(/\{\{-\s*(.*?)\s*\}\}/g, '<%-$1%>')
		// 代码块: {{# code }} => <% code %>
		.replace(/\{\{#\s*(.*?)\s*\}\}/g, '<%$1%>');
}

/**
 * 解析 EJS 模板字符串（支持 {{ }} 语法）
 * @param {string} templateStr - 模板字符串
 * @param {object} data - 模板数据
 * @returns {string} 解析后的 HTML
 */
export function renderEjsTemplate(templateStr, data = {}) {
	try {

		templateStr = templateStr?.trim();

		// 预处理，将 {{ }} 转换为 <% %>
		const processedTemplate = preprocessTemplate(templateStr);

		// 合并用户数据 + 自定义函数
		const context = {
			...data,
			...ejsHelpers
		};

		// 使用默认配置
		const options = {
			strict: false,
			escape: (value) => value
		};

		// 编译并渲染
		return ejs.render(processedTemplate, context, options);
	} catch (error) {
		console.error('EJS 解析失败:', error);
		return `<pre>EJS 解析失败: ${error.message}\n在模板: ${templateStr}</pre>`;
	}
}
